[Ansible]DockerコンテナとEC2混在環境をインベントリで管理する
コンニチーハ、千葉です。
今日はDockerコンテナとEC2が混在している環境をインベントリで管理してみます。
といってもそんなに難しくありません。
まずは、ansible.cnfでssh_configを設定するを参考にEC2環境ホストのセットアップをします。
EC2向けの設定
ssh_config
Host ec2-1 User ec2-user HostName xxx.xxx.xxx.xxx IdentityFile xxx.pem Host ec2-2 User ec2-user HostName xxx.xxx.xxx.xxx IdentityFile xxx.pem Host ec2-3 User ec2-user HostName xxx.xxx.xxx.xxx IdentityFile xxx.pem
ansible.cfg
[ssh_connection] ssh_args = -F ssh_config
hosts
[ec2] ec2-[1:3]
疎通確認してみます。
local$ ansible all -i hosts -m ping ec2-2 | success >> { "changed": false, "ping": "pong" } ec2-3 | success >> { "changed": false, "ping": "pong" } ec2-1 | success >> { "changed": false, "ping": "pong" }
できました!
Docker向けの設定
次にDockerコンテナです。今回は、Mac上にDocker ToolBox上でコンテナを起動します。
local$ docker run -itd --hostname docker-1 --name docker-1 centos:centos6 /bin/bash local$ docker run -itd --hostname docker-2 --name docker-2 centos:centos6 /bin/bash local$ docker run -itd --hostname docker-3 --name docker-3 centos:centos6 /bin/bash local$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4cebf1ce2f02 centos:centos6 "/bin/bash" 2 seconds ago Up 2 seconds docker-3 4ad51cdd93ef centos:centos6 "/bin/bash" 3 seconds ago Up 2 seconds docker-2 6331eadbce40 centos:centos6 "/bin/bash" 48 seconds ago Up 47 seconds docker-1
インベントリにDockerコンテナを追加します。
[ec2] ec2-[1:3] docker-[1:3] ansible_connection=docker
ポイントは、接続の種類にdocker pluginでの接続を指定します。
こちらのように、playbook側にconnection: docker
を指定することでも可能ですが、インベントリに接続の種類を指定した方がplaybook側で意識しなくて良く、またansible
コマンドでのモジュールの実行も可能となります。
接続確認してみます。
ansible all -i hosts -m ping docker-1 | SUCCESS => { "changed": false, "ping": "pong" } ec2-1 | SUCCESS => { "changed": false, "ping": "pong" } ec2-3 | SUCCESS => { "changed": false, "ping": "pong" } ec2-2 | SUCCESS => { "changed": false, "ping": "pong" } docker-3 | SUCCESS => { "changed": false, "ping": "pong" } docker-2 | SUCCESS => { "changed": false, "ping": "pong" }
できました。
まとめ
Ansibleを利用することにより、EC2とDockerコンテナの構成管理を行うことができます。
また、開発環境はDockerコンテナ、本番環境はEC2のような構成でもインベントリでコネクションの種類を指定するだけで同じplaybookが実行できます。
Ansible素敵です。